<template>
  <div>
    <!-- 2.6使用status渲染 -->
    <el-dialog
      :title="status.isAdd ? '角色添加' : '角色编辑'"
      :visible.sync="status.isshow"
      @closed="closed"
    >
      <!-- 6.4 绑定数据到表单 -->
      <el-form :model="form">
        {{ form }}
        <el-form-item label="角色名称" label-width="120px">
          <el-input v-model="form.rolename" autocomplete="off"></el-input>
        </el-form-item>
        <el-form-item label="角色权限" label-width="120px">
          <!-- 树形控件 -->
          <el-tree
            :data="treeList"
            show-checkbox
            default-expand-all
            node-key="id"
            ref="tree"
            :props="{ children: 'children', label: 'title' }"
          >
          </el-tree>
        </el-form-item>

        <el-form-item label="状态" label-width="120px">
          <el-switch
            v-model="form.status"
            :active-value="1"
            :inactive-value="2"
          ></el-switch>
        </el-form-item>
      </el-form>
      <div slot="footer" class="dialog-footer">
        <el-button @click="cancel()">取 消</el-button>
        <el-button type="primary" v-if="status.isAdd" @click="add">添 加</el-button>
        <el-button type="primary" v-else @click="update">修 改</el-button>
      </div>
    </el-dialog>
  </div>
</template>
<script>
// 1.画静态页面： 略
// 2.用模拟数据 画了一棵树
// 3.给表单数据定了初始值
// 4.请求权限的数据【菜单列表】
// 5.添加逻辑：注意：添加之前要先得到树的数据，再发请求
// 6.清空操作：form清空了，tree也需要清空
// 7.列表获取
// 8.删除
// 9.编辑
// 10.删除
import {
  reqmenulist,
  reqroleadd,
  reqroleedit,
  reqroleinfo,
} from "../../../http/api";
import { successAlert } from "../../../utils/alert";
import {mapGetters,mapActions} from "vuex"
export default {
  components: {},
  props: ["status", "list"],
  data() {
    return {
      // 树形控件的模拟数据
      treeList: [],

      // 6.1 初始化表单数据
      form: {
        rolename: "",
        menus: "",
        status: 1,
      },
      
    };
  },
  mounted() {
    //  4.请求菜单列表的数据
    reqmenulist({ istree: true }).then((res) => {
      if (res.data.code == 200) {
        this.treeList = res.data.list;
      }
    });
  },
  methods: {
    ...mapActions([
      "changeInfo"
    ]),
    //2.7点了取消
    cancel() {
      this.status.isshow = false;
    },
    //6.6form数据清空
    empty() {
      this.form = {
        rolename: "",
        menus: "",
        status: 1,
      };
      //单独处理树的清空
      this.$refs.tree.setCheckedKeys([])
    },
    // 6.5 添加逻辑
    add() {
      // 先将树上的数据取出来，给form.menus
      this.form.menus = JSON.stringify(this.$refs.tree.getCheckedKeys());
      // 发请求
      reqroleadd(this.form).then((res) => {
        if (res.data.code == 200) {
          // 1.弹成功
          successAlert(res.data.msg)
          // 2.form的数据清空一下
          this.empty()
          // 3.弹框消失
          this.status.isshow=false
          // 4.列表需要重新渲染
          this.$emit("init")
        }
      });
    },
   
    //7.3点击了编辑按钮 ，获取一条数据
    getOne(id) {
      reqroleinfo({
        id:id
      }).then(res=>{
        if(res.data.code==200){
          // res.data.list :{rolename: "11", menus: "[24,25,26]", status: 1}
          this.form=res.data.list;
          // 补id 
          this.form.id=id;
          //给树赋值
          this.$refs.tree.setCheckedKeys(JSON.parse(this.form.menus))
        }
      })
    },
    //8.1修改逻辑
    update() {
      // 取出树的值给form.menus 
      this.form.menus=JSON.stringify(this.$refs.tree.getCheckedKeys())
      reqroleedit(this.form).then((res) => {
        if (res.data.code == 200) {
          // 1.弹成功
          successAlert(res.data.msg);

          //验证一下刚刚修改的角色是不是当前登录用户所属的角色，如果是，就要清除用户信息，并退出登录
          if(this.form.id===this.info.roleid){
            //清除数据
            this.changeInfo({})
            //退出登录
            this.$router.replace("/login")
            return;
          }

          // 2.form的数据清空一下
          this.empty();
          // 3.弹框消失
          this.status.isshow = false;
          // 4.列表需要重新渲染
          this.$emit("init");
        }
      });
    },
    // 9.弹框关闭
    closed() {
      // 如果是添加的取消，什么都不做；如果是编辑的取消，form清空
      if (!this.status.isAdd) {
        this.empty();
      }
    },
  },

  computed: {
    ...mapGetters(["info"])
  },
  watch: {},
};
</script>
<style scoped lang="less">
@import "../../../less/index.less";
</style>

